#!/bin/bash  
  
# 当前节点IP   
IP="`/sbin/ip a s  | grep -iw "eth0\|bond0" | grep -i "10.145." | awk '{print $2}' | awk -F "/" '{print $1}' | head -1`"  
  
# 要检查的路径列表  
PATHS=(  
    "/app/log/messages"  
    "/apps/log/messages"  
    "/var/log/messages"  
    "/dcos/log/messages"  
    "/app/log/adm/messages"
    "/apps/log/adm/messages"
)  

#文件过滤路径
FILTER_FILE=/app/paasadmin
sudo /bin/mkdir -p  $FILTER_FILE 


#输出结果保存路径
LogrotateResult="$FILTER_FILE/logrotateResult.text"

#状态
LogConfigStatus=""
  
# 用于检查是否至少找到一个配置的路径的标志  
found=0  

#初始化集群信息
network_type=""


#Ip对应集群名判断
function MatchCluster(){
# 使用 case 语句和条件表达式来判断 IP 地址区间  
case $IP in  
    # 第一个区间 
    10.145.167.*)  
        network_type="paas-crm-container-c2"  
        ;;  
    # 第二个区间 
    10.145.169.[3-8])  
        network_type="paas-crm-container-c3"  
        ;;  
    # 第三个区间 
    10.145.158.7[7-9])  
        network_type="paas-crm-container-c4"  
        ;;  
    10.145.158.7[0-3])  
        network_type="paas-crm-container-c4"  
        ;;  
    10.145.158.8[0-5])  
        network_type="paas-crm-container-c4"  
        ;;  
    10.145.158.18[7-9])  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.190)  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.13[7-9])  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.13[0-3])  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.14[0-9])  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.15[0-4])  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.169)  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.158.211)  
        network_type="paas-crm-container-c5"  
        ;;  
    10.145.151.*)  
        network_type="acct-ccse-c1"  
        ;;  
    10.145.149.*)  
        network_type="mss-ccse-001"  
        ;;  
    10.145.166.1[0-7])  
        network_type="oss-ccse-01"  
        ;;  
    10.145.166.2[6-9])  
        network_type="oss-ccse-02"  
        ;;  
    10.145.166.3[0-6])  
        network_type="oss-ccse-02"  
        ;;  
    10.145.166.4[2-9])  
        network_type="oss-ccse-03"  
        ;;  
    10.145.166.5[0-7])  
        network_type="oss-ccse-03"  
        ;;  
    10.145.166.8[5-9])  
        network_type="oss-ccse-04"  
        ;;  
    10.145.166.9[0-2])  
        network_type="oss-ccse-04"  
        ;;  
    10.145.166.129)  
        network_type="oss-ccse-04"  
        ;;  
    10.145.166.13[0-4])  
        network_type="oss-ccse-04"  
        ;;  
    10.9.6.5[3-9])  
        network_type="oss-ccse-05"  
        ;;  
    10.9.6.6[0-3])  
        network_type="oss-ccse-05"  
        ;;  
    10.145.166.6[5-9])  
        network_type="public-ccse-c1"  
        ;;  
    10.145.166.7[0-6])  
        network_type="public-ccse-c1"  
        ;;  
    10.9.6.[6-20])  
        network_type="public-ccse-c2"  
        ;;  
    10.145.175.*)  
        network_type="paas-ccse-ipsdn"  
        ;;  
    10.145.131.*)  
        network_type="paas-crm-container-c1"  
        ;;  
    # 如果 IP 不在任何区间内  
    *)  
        network_type="Unknown Network"  
        ;;  
  esac  
}

# Logrotate配置检查
function LogrotateConfig(){

  # 遍历路径并检查logrotate配置  
  for path in "${PATHS[@]}"; do
      # 使用grep检查路径是否在logrotate配置中，并忽略大小写  
      if sudo grep -qiE "$path" /etc/logrotate.conf /etc/logrotate.d/*; then
          # 如果找到，输出信息并设置found标志  
          sudo echo -n "$path", >> $LogrotateResult  # 注意：这里只输出三列，因为每个已配置的路径都占一行  
          found=1
      fi
  done

  # 如果没有找到任何配置的路径，则输出未配置的消息  
  if [ "$found" -eq 0 ]; then
      echo -e "无," >> $LogrotateResult 
  fi
  sleep 0.5
  CheckLogStatus
}  


function SysLogConfig(){

  sudo chown -R paasadmin:paasadmin $LogrotateResult
  
  sudo echo -n  $network_type"," > $LogrotateResult  && sudo  echo -n $IP"," >> $LogrotateResult

  # 定义要搜索的配置文件路径  
  MAIN_CONFIG="/etc/rsyslog.conf"  
  CONFIG_DIR="/etc/rsyslog.d/"  
  
  # 检查主配置文件  
  #echo "搜索 /etc/rsyslog.conf 文件..."  
  sudo grep -E '^[^#;].*messages\b' "$MAIN_CONFIG" | while read line; do  
      #echo -e  "在 $MAIN_CONFIG 中配置:$line"  
      sudo echo -e $line |  grep  "/log/messages\|/log/adm/messages" | awk '{printf $NF","}' >> $LogrotateResult
      FilePath=`echo -e $line |  grep  "/log/messages\|/log/adm/messages" | awk '{printf $NF}'`
      #echo $FilePath
      sudo du -sh $FilePath | grep "/log/messages\|/log/adm/messages" | awk '{printf $1","}' >> $LogrotateResult
      # 如果你的配置行有特定的格式，比如以文件路径结尾，你可能需要更复杂的解析  
  done  
  
  # 检查 /etc/rsyslog.d/ 目录下的所有 .conf 文件  
  #echo "搜索 /etc/rsyslog.d/ 目录下的配置文件..."  
  for file in "$CONFIG_DIR"*.conf; do  
      if [ -f "$file" ]; then  
          grep -E '^[^#;].*messages\b' "$file" | while read line; do  
              echo "在 $file 中找到相关配置: $line"  
          done  
      fi  
  done  
}


#Logrotate状态检查及测试运行
function LogrotateStatus(){
  
  # 定义logrotate的配置文件路径  
  LOGROTATE_CONF="/etc/logrotate.conf"  
  
  # 检查cron.daily目录中是否存在logrotate相关的任务  
  CRON_DAILY_DIR="/etc/cron.daily"  
  if [ -f "$CRON_DAILY_DIR/logrotate" ] || [ -L "$CRON_DAILY_DIR/logrotate" ]; then  
      # 尝试运行logrotate，并捕获其输出  
      #echo "正在尝试运行logrotate..."  
      OUTPUT=$(/usr/sbin/logrotate -d $LOGROTATE_CONF 2>&1)
      RETURN_CODE=$?

      # 检查logrotate的返回值和输出  
      if [ $RETURN_CODE -eq 0 ]; then
         echo -n  "logrotate运行成功"  >> $LogrotateResult
         # 如果需要，可以进一步分析OUTPUT变量中的详细输出  
         # echo "$OUTPUT"  
      else
         #echo "logrotate 运行异常，输出如下："  
         echo "$OUTPUT" | grep -i "error"  >> $LogrotateResult
         exit $RETURN_CODE
      fi
  else  
      sudo echo "cron.daily目录中未找到logrotate脚本,"  >> $LogrotateResult 
      exit 1  
  fi  
  #echo "检查完成。"
}

function CheckLogStatus(){
  config1=`cat $LogrotateResult | awk -F "," '{print $5}'`
  config2=`cat $LogrotateResult | awk -F "," '{print $3}'`
  if [ $config1 == $config2 ]; then
      sudo echo -n  "已配置," >> $LogrotateResult 
  else
      echo -n  "未配置,"  >> $LogrotateResult
  fi
}

MatchCluster
SysLogConfig
LogrotateConfig
LogrotateStatus
